/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.entity;

import br.com.folha.service.FolhaService;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import java.text.SimpleDateFormat;

/**
 *
 * @author marceloml
 */
@Entity
@Table(name="grade_horaria")
public class CalculoFolha implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id    
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "CD_GRADE")
    private Integer id;  
    
     
    @ManyToOne
    @JoinColumn(name = "CD_TURMA")
    private Turma turma;       
    
    @ManyToOne
    @JoinColumn(name = "CD_DISCIPLINA")
    private Disciplina disciplina;       
    
    @ManyToOne
    @JoinColumn(name = "CD_PROFESSOR")
    private Professor professor;           
    
    @ManyToOne
    @JoinColumn(name = "CD_UNIDADE")
    private Unidade unidade;               
    
    @Column(name = "HORA_INI")
    @Temporal(javax.persistence.TemporalType.TIME)
    private Date horaIni;    
    
    @Column(name = "HORA_FIM")
    @Temporal(javax.persistence.TemporalType.TIME)
    private Date horaFim;    

    @Transient
    private String totHrs;
    
    @Transient
    private Float valor;
             
    @Column(name = "DATA")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date data;       
    
    @Column(name = "DT_CADASTRO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_cadastro;   
    
    @Column(name = "CD_USUARIO_CADASTRO")
    private Integer usuario_cadastro;      

    @Column(name = "DT_ATUALIZACAO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_atualizacao;          

    @Column(name = "CD_USUARIO_ATUALIZACAO")
    private Integer usuario_atualizacao;      


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Turma getTurma() {
        return turma;
    }

    public void setTurma(Turma turma) {
        this.turma = turma;
    }

    public Date getHoraIni() {
        return horaIni;
    }

    public void setHoraIni(Date horaIni) {
        this.horaIni = horaIni;
    }
    
    public String getTotHrs() {
        
        String dStart = "01/01/2013 " + String.valueOf(horaIni);
        String dStop = "01/01/2013 " + String.valueOf(horaFim);

        SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

        Date d1 = null;
        Date d2 = null;

        try{
        d1 = fmt.parse(dStart);
        d2 = fmt.parse(dStop);

        long difference = d2.getTime() - d1.getTime();
        
        long minutes = difference / (60 * 1000) % 60;
        long hours = difference / (60 * 60 * 1000) % 24;
                
        totHrs = String.valueOf(hours) + ":" + String.valueOf(minutes);
        
        if (hours < 10 && minutes < 10) {
            totHrs = "0" + String.valueOf(hours) + ":" + "0" + String.valueOf(minutes);  
        }
        else if (hours < 10 && minutes >= 10) {
            totHrs = "0" + String.valueOf(hours) + ":" + String.valueOf(minutes);  
        }
        else if (hours >= 10 && minutes < 10) {
            totHrs = String.valueOf(hours) + ":" + "0" + String.valueOf(minutes);  
        }
        
        } catch (Exception e) {
         
        }

        
        return totHrs;
    }
    
//    public Float getValor() {
//
//        Turma resultado; 
//        ProfessorUnidadeTipologia resultado2;
//
//        String dStart = "01/01/2013 " + String.valueOf(horaIni);
//        String dStop = "01/01/2013 " + String.valueOf(horaFim);
//
//        SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
//
//        Date d1 = null;
//        Date d2 = null;
//
//        try{
//            d1 = fmt.parse(dStart);
//            d2 = fmt.parse(dStop);
//
//            float difference = d2.getTime() - d1.getTime();
//            float hours = difference / (60 * 60 * 1000) % 24;   // Eliza -> arrendondar para 2 casas decimais
//
//            System.out.println("total em horas : " + hours);
//
//            valor = hours;
//
//           Session sessao = HibernateUtil.getSessionFactory();
//           Query query = sessao.createQuery("from Turma where cd_turma = :id");               
//           query.setParameter("id", turma.getId());  
//
//           try{
//             resultado=(Turma) query.uniqueResult();
//
//             Integer formaCalc = resultado.getFormaCalc();
//             Float valTurma = resultado.getValor().floatValue();
//
//             System.out.println("forma de calculo: " + formaCalc);
//             System.out.println("valor : " + valTurma);
//
//             if (formaCalc == 1) {  // Padrão
//
//                 System.out.println("Calculo Padrão");
//
//                 Session sessao2 = HibernateUtil.getSessionFactory();
//                 Query query2 = sessao2.createQuery("FROM ProfessorUnidadeTipologia WHERE professor = :professor and unidade = :unidade");               
//                 query2.setParameter("professor", professor.getId());        
//                 query2.setParameter("unidade", unidade); 
//
//                     resultado2=(ProfessorUnidadeTipologia) query2.uniqueResult();
//
//                     Float valTipologia = resultado2.getTipologia().getValor().floatValue();
//
//                     System.out.println("valor tipologia : " + valTipologia);
//
//                     valor = hours * valTipologia;
//
//                     sessao2.close();
//             }
//
//             if (formaCalc == 2) {  // Percentual
//
//                 System.out.println("Calculo por Percentual");
//
//                 Session sessao2 = HibernateUtil.getSessionFactory();
//                 Query query2 = sessao2.createQuery("FROM ProfessorUnidadeTipologia WHERE professor = :professor and unidade = :unidade");               
//                 query2.setParameter("professor", professor.getId());        
//                 query2.setParameter("unidade", unidade); 
//
//                  resultado2=(ProfessorUnidadeTipologia) query2.uniqueResult();
//
//                     Float valTipologia = resultado2.getTipologia().getValor().floatValue();
//
//                     System.out.println("valor tipologia : " + valTipologia);
//
//                     valor = hours * valTipologia * (valTurma / 100);  
//
//
//                     sessao2.close();
//             }
//
//             if (formaCalc == 3) {  // Valor Fixo 
//
//                 System.out.println("Calculo Valor Fixo");
//
//                 valor = hours * valTurma;
//
//             }
//
//            }catch(NoResultException e){
//              System.out.println("Erro1: " + e);
//            }finally{
//
//                sessao.close();
//            }
//
//        } catch (Exception e) {
//         System.out.println("Erro2: " + e);
//        }
//
//
//        return valor;
//    }
    
    public Float getValor() {
        
        FolhaService folhaService = new FolhaService();
        
        return folhaService.getValor(professor, unidade, turma, horaIni, horaFim);
        
    }

    public Date getHoraFim() {
        return horaFim;
    }

    public void setHoraFim(Date horaFim) {
        this.horaFim = horaFim;
    }
    

    public Date getDt_cadastro() {
        return dt_cadastro;
    }

    public void setDt_cadastro(Date dt_cadastro) {
        this.dt_cadastro = dt_cadastro;
    }

    public Integer getUsuario_cadastro() {
        return usuario_cadastro;
    }

    public void setUsuario_cadastro(Integer usuario_cadastro) {
        this.usuario_cadastro = usuario_cadastro;
    }

    public Date getDt_atualizacao() {
        return dt_atualizacao;
    }

    public void setDt_atualizacao(Date dt_atualizacao) {
        this.dt_atualizacao = dt_atualizacao;
    }

    public Integer getUsuario_atualizacao() {
        return usuario_atualizacao;
    }

    public void setUsuario_atualizacao(Integer usuario_atualizacao) {
        this.usuario_atualizacao = usuario_atualizacao;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public Disciplina getDisciplina() {
        return disciplina;
    }

    public void setDisciplina(Disciplina disciplina) {
        this.disciplina = disciplina;
    }

    public Professor getProfessor() {
        return professor;
    }

    public void setProfessor(Professor professor) {
        this.professor = professor;
    }

    /**
     * @return the unidade
     */
    public Unidade getUnidade() {
        return unidade;
    }

    /**
     * @param unidade the unidade to set
     */
    public void setUnidade(Unidade unidade) {
        this.unidade = unidade;
    }
    
}